page.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use server';
  2. import View from './view';
  3. import { notFound, forbidden, unauthorized } from 'next/navigation';
  4. import { isAuthenticated } from '@/lib/api/auth';
  5. import { fetchBoard, fetchBoardList } from '@/lib/api/forum/board';
  6. import { fetchPostData } from '@/lib/api/forum/post';
  7. import { getTokenData } from '@/lib/utils/server';
  8. import { TokenData } from '@/dtos/response/common';
  9. export default async function PostEdit({ params }: { params: Promise<{ id: string }> })
  10. {
  11. const { id } = await params;
  12. if (!/^\d+$/.test(id)) {
  13. return forbidden();
  14. }
  15. let tokenData: TokenData|null;
  16. try {
  17. if (!await isAuthenticated()) {
  18. throw Error;
  19. }
  20. // 회원 정보 조회
  21. tokenData = await getTokenData();
  22. if (!tokenData) {
  23. throw Error;
  24. }
  25. console.log(tokenData);
  26. } catch {
  27. return unauthorized();
  28. }
  29. try {
  30. // 게시글 정보 조회
  31. const post = await fetchPostData(Number(id));
  32. if (!post.success || !post.data) {
  33. throw Error;
  34. }
  35. // 게시판 상세 조회
  36. const board = await fetchBoard(post.data.boardCode);
  37. if (!board.success || !board.data) {
  38. throw Error;
  39. }
  40. // 게시판 목록 조회
  41. const boardList = await fetchBoardList(board.data.boardGroup.code);
  42. if (!boardList.success || !boardList.data) {
  43. return notFound();
  44. }
  45. return (
  46. <View _boardList={boardList.data} _board={board.data} _post={post.data} />
  47. );
  48. } catch {
  49. return notFound();
  50. }
  51. }